/**
 * @file langue.h
 * @brief Fichier d'entête du module langue.
 *
 * @author Rachid Delory, Mamadou Keita, Florian Bernard
 */

#ifndef H_LANGUE_H
#define H_LANGUE_H

/* *********************************************************************

                       Librairies de langue                           

********************************************************************* */

#include <stdlib.h>
#include <stdio.h>
#include <stddef.h>
#include "utilitaireString.h"

/* *********************************************************************

                        Définitions de types                           

********************************************************************* */

/**
 * @struct sLangue
 * @brief Structure utilisée pour la gestion des Langue
 *
 * Cette structure est utilisée pour gérer un Langue. Les champs de cette structure doivent être modifiés ou lus par les accesseurs et mutateurs. Ils doivent être initialisés et libérés avec les fonctions prévus à cette effet
 */
struct sLangue {
	unsigned int id; /** */
	char * libelle; /** */
  char maj;
  char sup;
};
/**
 * @typedef Langue
 * @brief Redéfinit la structure sLangue
 */
	typedef struct sLangue Langue;

/* *********************************************************************

           Fonctions de la structure Langue          

********************************************************************* */

/**
 * @fn Langue * creer_Lan() ;
 * @brief Crée une langue dans le tas
 *
 * @return un pointeur sur Langue
 */
void * creer_Lan();

/**
 * @fn void init_Lan(Langue * langue);
 * @brief Initilise une langue
 *
 * @param[in,out] Langue pointeur sur Langue
 */
void init_Lan(Langue * langue);

/**
 * @fn void liberer_Lan(Langue * langue);
 * @brief Libère la langue
 *
 * @param[in,out] langue pointeur sur Langue
 */
void liberer_Lan(Langue * langue);

/**
 * @fn void detruire_Lan(Langue ** langue);
 * @brief Détruis une langue du tas
 * 
 * @param[in,out] langue pointeur sur Langue
 */
void detruire_Lan(Langue ** langue);

/**
 * @fn void copier_Lan(Langue *dest, const Langue *src);
 * @brief Copie dans dest le Langue src
 *
 * @param[in,out] dest contiendra les mêmes infor que src
 * @param src
 */
void copier_Lan(Langue **dest, const Langue *src);

/* *********************************************************************

           Accesseurs et Mutateurs de la structure Langue               

********************************************************************* */

/**
 * @fn unsigned int getId_Lan(const Langue * ptr) ;
 * @brief 
 *
 * @param ptr pointeur vers Langue
 * @return unsigned int
 */
unsigned int getId_Lan(const Langue * ptr) ;

/**
 * @fn void setId_Lan(Langue *ptr, const unsigned int val) ;
 * @brief Modifie .
 *
 * @param[in,out] ptr Pointeur vers Langue.
 * @param val.
 */
void setId_Lan(Langue *ptr, const unsigned int val) ;

/**
 * @fn char * getLibelle_Lan(const Langue * ptr) ;
 * @brief 
 *
 * @param ptr pointeur vers Langue
 * @return char *
 */
char * getLibelle_Lan(const Langue * ptr) ;

/**
 * @fn void setLibelle_Lan(Langue *ptr, const char * val) ;
 * @brief Modifie .
 *
 * @param[in,out] ptr Pointeur vers Langue.
 * @param val.
 */
void setLibelle_Lan(Langue *ptr, const char * val) ;

/**
 * @fn void setMaj_Lan(Langue *ptr, const char b);
 * @brief Set le besoin de faire une mise à jour, ou pas
 * 
 * @param[in,out] ptr
 * @parm b
 */
void setMaj_Lan(Langue *ptr, const char b);

/**
 * @fn char getMaj_Lan(const Langue *ptr);
 * @brief Retourne 0 si pas besoin de faire la mise à jour, et 1 sinon
 *
 * @param ptr
 * @return Comme un boolean
 */
char getMaj_Lan(const Langue *ptr);

/**
 * @fn void setSup_Lan(Langue *ptr, const char b);
 * @brief Set le besoin de le supprimer, ou pas
 * 
 * @param[in,out] ptr
 * @parm b
 */
void setSup_Lan(Langue *ptr, const char b);

/**
 * @fn char getSup_Lan(const Langue *ptr);
 * @brief Retourne 0 si pas besoin de le supprimer, et 1 sinon
 *
 * @param ptr
 * @return Comme un boolean
 */
char getSup_Lan(const Langue *ptr);

#endif
